﻿using System;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
using Elysium.Demo.CapitalHumano.Catalogos;
using SIIE_ERP.Codigo;
using System.Data;
using SIIE_ERP.BaseDatos;
using Elysium.Demo.Controls;
using System.Windows.Media;
using System.Windows;
using System.Threading;

namespace SIIE_ERP.View
{
    public class Mensajes
    {
        public static string getMessage(EstatusDocs_Id status)
        {
            switch(status)
            {
                case EstatusDocs_Id.Estatus_Doc_Asentado: return "Asentado";
                case EstatusDocs_Id.Estatus_Doc_Activo: return "Activo";
                case EstatusDocs_Id.Estatus_Doc_Cancelado: return "Cancelado";
                case EstatusDocs_Id.Estatus_Doc_Cargado: return "Cargado";
                case EstatusDocs_Id.Estatus_Doc_Conciliado: return "Conciliado";
                case EstatusDocs_Id.Estatus_Doc_Devolucion: return "Devolución";
                case EstatusDocs_Id.Estatus_Doc_En_Proceso_de_Pago: return "En proceso de pago";
                case EstatusDocs_Id.Estatus_Doc_Factura: return "Factura";
                case EstatusDocs_Id.Estatus_Doc_Finalizado: return "Finalizado";
                case EstatusDocs_Id.Estatus_Doc_NoConciliado: return "No conciliado";
                case EstatusDocs_Id.Estatus_Doc_OrdenCompra: return "Orden de compra";
                case EstatusDocs_Id.Estatus_Doc_Pagado: return "Pagado";
                case EstatusDocs_Id.Estatus_Doc_Pedido: return "Pedido";
                case EstatusDocs_Id.Estatus_Doc_Recepcion: return "Recepción";
                case EstatusDocs_Id.Estatus_Doc_Remision: return "Remisión";
            }
            return null;
        }
    }

    public class ComboBoxUI
    {
        public static void ComboTiempo(ref ComboBox ComboTiempo)
        {
            ComboTiempo.Items.Clear();

            ComboTiempo.SelectedValuePath = "Id";
            ComboTiempo.DisplayMemberPath = "Nombre";
            
            ComboTiempo.Items.Add(new CItem("1", "Mes Actual"));
            ComboTiempo.Items.Add(new CItem("2", "Mes Anterior"));
            ComboTiempo.Items.Add(new CItem("3", "Año Actual"));
            ComboTiempo.Items.Add(new CItem("4", "Año Anterior"));
            ComboTiempo.Items.Add(new CItem("5", "Toda la Historia"));
            
            if (ComboTiempo.Items.Count > 0 && ComboTiempo.SelectedValue == null)
                ComboTiempo.SelectedIndex = 0;
        }

        public static void ComboTiempo_Pipeline(ref ComboBox ComboTiempo)
        {
            ComboTiempo.Items.Clear();

            ComboTiempo.SelectedValuePath = "Id";
            ComboTiempo.DisplayMemberPath = "Nombre";

            ComboTiempo.Items.Add(new CItem("1", "Mes Actual"));
            ComboTiempo.Items.Add(new CItem("2", "Trimestre Actual"));
            ComboTiempo.Items.Add(new CItem("3", "Semestre Actual"));
            ComboTiempo.Items.Add(new CItem("4", "Año Actual"));
            ComboTiempo.Items.Add(new CItem("5", "Próximo Año"));

            if (ComboTiempo.Items.Count > 0 && ComboTiempo.SelectedValue == null)
                ComboTiempo.SelectedIndex = 0;
        }

        public static void ComboAnio(ref ComboBox ComboAnio)
        {
            ComboAnio.Items.Clear();

            ComboAnio.SelectedValuePath = "Id";
            ComboAnio.DisplayMemberPath = "Nombre";

            ComboAnio.Items.Add(new CItem(DateTime.Now.Year.ToString(), DateTime.Now.Year.ToString()));
            ComboAnio.Items.Add(new CItem((DateTime.Now.Year - 1).ToString(), (DateTime.Now.Year - 1).ToString()));
            ComboAnio.Items.Add(new CItem((DateTime.Now.Year - 2).ToString(), (DateTime.Now.Year - 2).ToString()));
            ComboAnio.Items.Add(new CItem((DateTime.Now.Year - 3).ToString(), (DateTime.Now.Year - 3).ToString()));
            ComboAnio.Items.Add(new CItem((DateTime.Now.Year - 4).ToString(), (DateTime.Now.Year - 4).ToString()));
            ComboAnio.Items.Add(new CItem("-1", "Acumulado"));

            if (ComboAnio.Items.Count > 0 && ComboAnio.SelectedValue == null)
                ComboAnio.SelectedIndex = 0;
        }

        public static void ComboEstatus(ref ComboBox ComboEstatus)
        {
            ComboEstatus.Items.Clear();

            ComboEstatus.SelectedValuePath = "Id";
            ComboEstatus.DisplayMemberPath = "Nombre";
            
            ComboEstatus.Items.Add(new CItem("-1", "Todos"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Activo.GetHashCode().ToString(), "Activo"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Asentado.GetHashCode().ToString(), "Asentado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Cancelado.GetHashCode().ToString(), "Cancelado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Cargado.GetHashCode().ToString(), "Cargado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Conciliado.GetHashCode().ToString(), "Conciliado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Devolucion.GetHashCode().ToString(), "Devolución"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_En_Proceso_de_Pago.GetHashCode().ToString(), "En Proceso de Pago"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Factura.GetHashCode().ToString(), "Factura"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Finalizado.GetHashCode().ToString(), "Finalizado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_NoConciliado.GetHashCode().ToString(), "No Conciliado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_OrdenCompra.GetHashCode().ToString(), "Orden de Compra"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Pagado.GetHashCode().ToString(), "Pagado"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Pedido.GetHashCode().ToString(), "Pedido"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Recepcion.GetHashCode().ToString(), "Recepción"));
            ComboEstatus.Items.Add(new CItem(EstatusDocs_Id.Estatus_Doc_Remision.GetHashCode().ToString(), "Remisión"));
            
            if (ComboEstatus.Items.Count > 0 && ComboEstatus.SelectedValue == null)
                ComboEstatus.SelectedIndex = 0;
        }


        public static void ComboOportunidades(ref ComboBox Combo, UsuarioActivo _sesion, bool IsForReport = false)
        {
            var db = new SIIE_ERP.BaseDatos.CRM.Transacciones.dbo_Trans_Oportunidad(_sesion.RFC, _sesion.UserName);
            var sucursales = db.Get_Oportunidades().Rows;
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Nombre";

            if(IsForReport)
                Combo.Items.Add(new CItem("-1", "Todas"));

            foreach (DataRow grupo in sucursales)
            {
                var Id = grupo["Id_Oportunidad"].ToString();
                var Nombre = grupo["Secuencia"].ToString() + " " + grupo["Descripcion"].ToString();
                Combo.Items.Add(new CItem(Id, Nombre));
            }
            if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                Combo.SelectedIndex = 0;
        }

        public static void ComboSucursales(ref ComboBox Combo, UsuarioActivo _sesion)
        {
            var db = new SIIE_ERP.BaseDatos.Configuracion.dbo_Cat_Sucursal(_sesion.RFC,  _sesion.UserName);
            var sucursales = db.Get_Sucursales().Rows;
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Nombre";
            foreach (DataRow grupo in sucursales)
            {
                var Id = grupo["Id_Sucursal"].ToString();
                var Nombre = grupo["Nombre"].ToString();
                Combo.Items.Add(new CItem(Id, Nombre));
            }
            if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                Combo.SelectedIndex = 0;
        }

        public static void ComboAlmacen(ref ComboBox Combo, UsuarioActivo _sesion)
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Almacen(_sesion.RFC, _sesion.UserName);
            var almacenes = db.Get_Almacenes().Rows;
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Nombre";

            foreach (DataRow grupo in almacenes)
            {
                var Id = grupo["Id_Almacen"].ToString();
                var Nombre = grupo["Descripcion"].ToString();
                Combo.Items.Add(new CItem(Id, Nombre));
            }
            if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                Combo.SelectedIndex = 0;
        }

        public static void ComboTipoMovimientoInventarios(ref ComboBox Combo, UsuarioActivo _sesion, bool IsForReport = false)
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_TipoMov_Inv(_sesion.RFC, _sesion.UserName);
            var movimientos = db.Get_TipoMov_Invs().Rows;
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Nombre";

            if(IsForReport)
                Combo.Items.Add(new CItem("-1", "Todos"));

            foreach (DataRow grupo in movimientos)
            {
                var Id = grupo["Id_TipoMov_Inv"].ToString();
                var Nombre = grupo["Nombre"].ToString();
                Combo.Items.Add(new CItem(Id, Nombre));
            }
            if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                Combo.SelectedIndex = 0;
        }

        public static void ComboGrupoProveedores(ref ComboBox ComboGrupo, UsuarioActivo _sesion, bool IsForReport = false)
        {
            var db = new SIIE_ERP.BaseDatos.Compras.Catalogos.dbo_Cat_Grupo_Proveedores(_sesion.RFC, _sesion.UserName);
            var grupos = db.Get_Grupo_Proveedoreses().Rows;
            ComboGrupo.SelectedValuePath = "Id";
            ComboGrupo.DisplayMemberPath = "Nombre";

            if (IsForReport)
                ComboGrupo.Items.Add(new CItem("-1", "Todos"));

            foreach (DataRow grupo in grupos)
            {
                var Id = grupo["Id_GrupoProveedores"].ToString();
                var Nombre = grupo["Nombre"].ToString();
                ComboGrupo.Items.Add(new CItem(Id, Nombre));
            }
            if (ComboGrupo.Items.Count > 0 && ComboGrupo.SelectedValue == null)
                ComboGrupo.SelectedIndex = 0;
        }

        public static void ComboCostoPreferido(ref ComboBox ComboCosto)
        {
            ComboCosto.Items.Clear();

            ComboCosto.SelectedValuePath = "Id";
            ComboCosto.DisplayMemberPath = "Nombre";
            ComboCosto.Items.Add(new CItem("1", "Costo Estandar"));
            ComboCosto.Items.Add(new CItem("2", "Ultimo Costo de Compra"));
            ComboCosto.Items.Add(new CItem("3", "Costo Promedio"));

            if (ComboCosto.Items.Count > 0 && ComboCosto.SelectedValue == null)
                ComboCosto.SelectedIndex = 0;
        }

        public static void ComboProbabilidad(ref ComboBox Combo, bool HasTodos = false)
        {

            Combo.Items.Clear();
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Nombre";

            if(HasTodos)
                Combo.Items.Add(new CItem("-1", "Todas"));

            Combo.Items.Add(new CItem("0", "Oportunidad Identificada (1% a 19%)"));
            Combo.Items.Add(new CItem("20", "Se ha contactado (20% a 39%)"));
            Combo.Items.Add(new CItem("40", "Se ha recibido respuesta (40% a 59%)"));
            Combo.Items.Add(new CItem("60", "En proceso de cotización (60% a 79%)"));
            Combo.Items.Add(new CItem("80", "En revisión de cotización (80% a 89%)"));
            Combo.Items.Add(new CItem("90", "En negociación (90% a 94%)"));
            Combo.Items.Add(new CItem("95", "Muy cercano al cierre (90% a 95%)"));

            if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                Combo.SelectedIndex = 0;
        }

        public static void ComboTerminales(ComboBox Combo, UsuarioActivo sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(sesion.RFC, sesion.UserName);
                var tipos = db.Get_Terminales().Rows;

                if(IsForReport)
                    lista.Add(new CItem("-1", "Todas"));

                foreach (DataRow tipo in tipos)
                {
                    var Id = tipo["Id_Terminal"].ToString();
                    var Nombre = tipo["Descripcion"].ToString();
                    lista.Add(new CItem(Id, Nombre));
                }

                Combo.Dispatcher.InvokeAsync(delegate()
                {
                    Combo.SelectedValuePath = "Id";
                    Combo.DisplayMemberPath = "Nombre";
                    Combo.ItemsSource = lista;
                    if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                        Combo.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start();
        }

        public static void ComboTipoMovimientoBancario(ComboBox Combo, UsuarioActivo sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_TipoMov_Banco(sesion.RFC, sesion.UserName);
                var tipos = db.Get_TipoMov_Bancos().Rows;

                if(IsForReport)
                    lista.Add(new CItem("-1", "Todos"));

                foreach (DataRow tipo in tipos)
                {
                    var Id = tipo["Id_TipoMov_Banco"].ToString();
                    var Nombre = tipo["Nombre"].ToString();
                    lista.Add(new CItem(Id, Nombre));
                }

                Combo.Dispatcher.InvokeAsync(delegate()
                {
                    Combo.SelectedValuePath = "Id";
                    Combo.DisplayMemberPath = "Nombre";
                    Combo.ItemsSource = lista;
                    if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                        Combo.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start();  
        }

        public static void ComboCuentasBancarias(ComboBox Combo, UsuarioActivo sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Cuenta_Bancaria(sesion.RFC, sesion.UserName);
                var tipos = db.Get_Cuentas_Bancarias().Rows;

                if(IsForReport)
                    lista.Add(new CItem("-1", "Todas"));

                foreach (DataRow tipo in tipos)
                {
                    var Id = tipo["Id_Cuenta"].ToString();
                    var Nombre = tipo["Nombre"].ToString();
                    lista.Add(new CItem(Id, Nombre));
                }

                Combo.Dispatcher.InvokeAsync(delegate()
                {
                    Combo.SelectedValuePath = "Id";
                    Combo.DisplayMemberPath = "Nombre";
                    Combo.ItemsSource = lista;
                    if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                        Combo.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start();          
        }

        public static void ComboCuentasBancariasEnPesos(ComboBox Combo, UsuarioActivo sesion)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Cuenta_Bancaria(sesion.RFC, sesion.UserName);
                var tipos = db.Get_Cuentas_Bancarias().Rows;

                var Pesos = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Moneda(sesion.RFC, sesion.UserName)
                                                    .Get_Moneda_Por_Nombre("Pesos Mexicanos").Rows[0]["Id_Moneda"].ToString();

                foreach (DataRow tipo in tipos)
                {
                    var Id = tipo["Id_Cuenta"].ToString();
                    var Nombre = tipo["Nombre"].ToString();
                    if (tipo["Id_Moneda"].ToString().Equals(Pesos))
                    {
                        lista.Add(new CItem(Id, Nombre));
                    }
                }

                Combo.Dispatcher.InvokeAsync(delegate()
                {
                    Combo.SelectedValuePath = "Id";
                    Combo.DisplayMemberPath = "Nombre";
                    Combo.ItemsSource = lista;
                    if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                        Combo.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start();
        }

        public static void ComboTipoArticulo(ComboBox ComboTipo, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
                {
                    var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_TipoArticulo();
                    var tipos = db.Get_Tipos_Articulo().Rows;

                    if (IsForReport)
                        lista.Add(new CItem("-1", "Todos"));

                    foreach (DataRow tipo in tipos)
                    {
                        var Id = tipo["Id_Tipo_Articulo"].ToString();
                        var Nombre = tipo["Nombre"].ToString();
                        if(!Nombre.Equals("Kit") && !Nombre.Equals("Tiempo Aire"))
                            lista.Add(new CItem(Id, Nombre));
                    }

                    ComboTipo.Dispatcher.InvokeAsync(delegate()
                    {
                        ComboTipo.SelectedValuePath = "Id";
                        ComboTipo.DisplayMemberPath = "Nombre";
                        ComboTipo.ItemsSource = lista;
                        if (ComboTipo.Items.Count > 0 && ComboTipo.SelectedValue == null)
                            ComboTipo.SelectedIndex = 0;
                    }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                }).Start();                
        }

        public static void ComboAlmacen(ref ComboBox ComboAlmacen, UsuarioActivo _sesion, bool AceptaNulo = false, bool IsForReport = false)
        {
            ComboAlmacen.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Almacen(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Almacenes().Rows;
            ComboAlmacen.SelectedValuePath = "Id";
            ComboAlmacen.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
                ComboAlmacen.Items.Add(new CItem("-1", " Sin Almacén"));
            

            if(IsForReport)
                ComboAlmacen.Items.Add(new CItem("-1", " Todos"));

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Almacen"].ToString();
                var Nombre = unidad["Descripcion"].ToString();
                ComboAlmacen.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboAlmacen.Items.Count > 0 && ComboAlmacen.SelectedValue == null)
                ComboAlmacen.SelectedIndex = 0;
        }

        public static void ComboRemisiones(ref ComboBox ComboRemisiones, int Id_Cliente, UsuarioActivo _sesion, int Id_Moneda)
        {
            ComboRemisiones.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_Ventas(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Documentos_By_IdCliente( Documentos_Id.Doc_Remision, Id_Cliente, EstatusDocs_Id.Estatus_Doc_Asentado, Id_Moneda ).Rows;
            ComboRemisiones.SelectedValuePath = "Id";
            ComboRemisiones.DisplayMemberPath = "Nombre";

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Remision"].ToString();
                var Nombre = unidad["Foto_Serie"].ToString() + " - " + unidad["Secuencia"].ToString();
                ComboRemisiones.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboRemisiones.Items.Count > 0 && ComboRemisiones.SelectedValue == null)
                ComboRemisiones.SelectedIndex = 0;
        }

        public static void ComboClientes_AutoComplete_Todo(ref FilteredComboBox ComboClientes, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboClientes.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Ventas.Catalogos.dbo_Cat_Cliente(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Clientes_AutoComplete_Todos().Rows;
            ComboClientes.SelectedValuePath = "Id";
            ComboClientes.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Cliente"));
            }

            foreach (DataRow unidad in unidades)
            {                
                var Id = unidad["Id_Cliente"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboClientes.ItemsSource = MiLista;
        }

        public static void ComboClientes_AutoComplete_SoloProspectos(ref FilteredComboBox ComboClientes, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboClientes.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Ventas.Catalogos.dbo_Cat_Cliente(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Clientes_AutoComplete_SoloProspectos().Rows;
            ComboClientes.SelectedValuePath = "Id";
            ComboClientes.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Cliente"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Cliente"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboClientes.ItemsSource = MiLista;
        }

        public static void ComboClientes_AutoComplete_SoloClientes(ref FilteredComboBox ComboClientes, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboClientes.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Ventas.Catalogos.dbo_Cat_Cliente(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Clientes_AutoComplete_SoloClientes().Rows;
            ComboClientes.SelectedValuePath = "Id";
            ComboClientes.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Cliente"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Cliente"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboClientes.ItemsSource = MiLista;
        }

        public static void ComboProveedores_AutoComplete(ref FilteredComboBox ComboProveedores, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboProveedores.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Compras.Catalogos.dbo_Cat_Proveedor(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Proveedores_AutoComplete().Rows;
            ComboProveedores.SelectedValuePath = "Id";
            ComboProveedores.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Proveedor"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Proveedor"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboProveedores.ItemsSource = MiLista;
        }

        public static void ComboSoloArticulos_AutoComplete(ref FilteredComboBox ComboArticulo, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboArticulo.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Articulos_AutoComplete().Rows;
            ComboArticulo.SelectedValuePath = "Id";
            ComboArticulo.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Artículo"));
            }

            foreach (DataRow unidad in unidades)
            {
                if (!unidad["Tipo_Articulo"].ToString().Equals("1") && !unidad["Tipo_Articulo"].ToString().Equals("2")) continue;
                var Id = unidad["Id_Articulo"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboArticulo.ItemsSource = MiLista;
        }

        public static void ComboDocumentos_AutoComplete(ref FilteredComboBox Combo, UsuarioActivo _sesion, string Cliente, 
                                                        bool Entrada, bool Todos, Documentos_Id? Tipo_Documento = null)
        {
            Combo.Items.Clear();
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Value";

            List<CAutocompleteDocumentos> MiLista = new List<CAutocompleteDocumentos>();
            var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);

            if (Entrada == true)
            {                
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
                {
                    var lista = db.Get_Documentos(Documentos_Id.Doc_FacturaCliente, Cliente).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Factura_Cliente"].ToString(),
                                                                    "Factura " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_FacturaCliente));
                    }
                }
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosVentas)
                {
                    var lista = db.Get_Documentos(Documentos_Id.Doc_ReciboHonorariosVentas, Cliente).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_ReciboHonorarios_Cliente"].ToString(),
                                                                    "R. de Honorarios " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_ReciboHonorariosVentas));
                    }
                }
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoVentas)
                {

                    var lista = db.Get_Documentos(Documentos_Id.Doc_ReciboArrendamientoVentas, Cliente).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_ReciboArrendamiento_Cliente"].ToString(),
                                                                    "R. de Arrendamiento " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_ReciboArrendamientoVentas));
                    }
                }
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_Remision)
                {

                    var lista = db.Get_Documentos(Documentos_Id.Doc_Remision, Cliente).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Remision"].ToString(),
                                                                    "Remisión " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_Remision));
                    }
                }
            }
            else
            {
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
                {

                    var lista = db.Get_Documentos(Documentos_Id.Doc_NotaCreditoCliente, Cliente).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Nota_Credito_Cliente"].ToString(),
                                                                    "Nota de Crédito " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_NotaCreditoCliente));
                    }
                }
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
                {

                    var lista = db.Get_Documentos(Documentos_Id.Doc_DevolucionCliente, Cliente).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Devolucion_Cliente"].ToString(),
                                                                    "Devolución " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_DevolucionCliente));
                    }
                }
            }
        }


        public static void ComboDocumentos_AutoCompleteNotaCreditoVentas(ref FilteredComboBox Combo, UsuarioActivo _sesion, string Cliente,
                                                        bool Todos, Documentos_Id? Tipo_Documento = null)
        {
            Combo.Items.Clear();
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Value";

            List<CAutocompleteDocumentos> MiLista = new List<CAutocompleteDocumentos>();
            var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);

            if (Todos == true || Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                var lista = db.Get_Documentos(Documentos_Id.Doc_FacturaCliente, Cliente).Rows;
                foreach (DataRow data in lista)
                {
                    Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Factura_Cliente"].ToString(),
                                                                "Factura " + data["Secuencia"].ToString(),
                                                                Documentos_Id.Doc_FacturaCliente));
                }
            }
            if (Todos == true || Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                var lista = db.Get_Documentos(Documentos_Id.Doc_ReciboHonorariosVentas, Cliente).Rows;
                foreach (DataRow data in lista)
                {
                    Combo.Items.Add(new CAutocompleteDocumentos(data["Id_ReciboHonorarios_Cliente"].ToString(),
                                                                "R. de Honorarios " + data["Secuencia"].ToString(),
                                                                Documentos_Id.Doc_ReciboHonorariosVentas));
                }
            }
            if (Todos == true || Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {

                var lista = db.Get_Documentos(Documentos_Id.Doc_ReciboArrendamientoVentas, Cliente).Rows;
                foreach (DataRow data in lista)
                {
                    Combo.Items.Add(new CAutocompleteDocumentos(data["Id_ReciboArrendamiento_Cliente"].ToString(),
                                                                "R. de Arrendamiento " + data["Secuencia"].ToString(),
                                                                Documentos_Id.Doc_ReciboArrendamientoVentas));
                }
            }            
        }

        public static void ComboDocumentos_AutoCompleteNotaCreditoCompras(ref FilteredComboBox Combo, UsuarioActivo _sesion, string Proveedor,
                                                        bool Todos, Documentos_Id? Tipo_Documento = null)
        {
            Combo.Items.Clear();
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Value";

            List<CAutocompleteDocumentos> MiLista = new List<CAutocompleteDocumentos>();
            var db = new SIIE_ERP.BaseDatos.Compras.Transacciones.Documento_Compras(_sesion.RFC, _sesion.UserName);
                        
            if (Todos == true || Tipo_Documento == Documentos_Id.Doc_FacturaProveedor)
            {

                var lista = db.Get_Documentos(Documentos_Id.Doc_FacturaProveedor, Proveedor).Rows;
                foreach (DataRow data in lista)
                {
                    Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Factura_Proveedor"].ToString(),
                                                                "Factura " + data["Secuencia"].ToString(),
                                                                Documentos_Id.Doc_FacturaProveedor));
                }
            }
        }
        
        public static void ComboDocumentos_AutoComplete_Proveedor(ref FilteredComboBox Combo, UsuarioActivo _sesion, string Proveedor,
                                                        bool Entrada, bool Todos, Documentos_Id? Tipo_Documento = null)
        {
            Combo.Items.Clear();
            Combo.SelectedValuePath = "Id";
            Combo.DisplayMemberPath = "Value";

            List<CAutocompleteDocumentos> MiLista = new List<CAutocompleteDocumentos>();
            var db = new SIIE_ERP.BaseDatos.Compras.Transacciones.Documento_Compras(_sesion.RFC, _sesion.UserName);

            if (Entrada == true)
            {
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_NotaCreditoProveedor)
                {
                    var lista = db.Get_Documentos(Documentos_Id.Doc_NotaCreditoProveedor, Proveedor).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Nota_Credito_Proveedor"].ToString(),
                                                                    "Nota de Crédito " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_NotaCreditoProveedor));
                    }
                }
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_DevolucionProveedor)
                {
                    var lista = db.Get_Documentos(Documentos_Id.Doc_DevolucionProveedor, Proveedor).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Devolucion_Proveedor"].ToString(),
                                                                    "Devolución " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_DevolucionProveedor));
                    }
                }
            }
            else
            {
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_FacturaProveedor)
                {

                    var lista = db.Get_Documentos(Documentos_Id.Doc_FacturaProveedor, Proveedor).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Factura_Proveedor"].ToString(),
                                                                    "Factura " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_FacturaProveedor));
                    }
                }
                if (Todos == true || Tipo_Documento == Documentos_Id.Doc_Recepcion)
                {

                    var lista = db.Get_Documentos(Documentos_Id.Doc_Recepcion, Proveedor).Rows;
                    foreach (DataRow data in lista)
                    {
                        Combo.Items.Add(new CAutocompleteDocumentos(data["Id_Recepcion"].ToString(),
                                                                    "Recepción " + data["Secuencia"].ToString(),
                                                                    Documentos_Id.Doc_Recepcion));
                    }
                }
            }
        }

        public static void ComboArticulos_AutoComplete_Ventas(ref FilteredComboBox ComboArticulo, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboArticulo.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Articulos_AutoComplete_Ventas().Rows;
            ComboArticulo.SelectedValuePath = "Id";
            ComboArticulo.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Artículo"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Articulo"].ToString();
                var Nombre = unidad["Complete"].ToString();
                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboArticulo.ItemsSource = MiLista;
        }

       
        public static void ComboArticulos_AutoComplete_ListaPrecios(ref FilteredComboBox ComboArticulo, UsuarioActivo _sesion, string p)
        {
            ComboArticulo.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Articulos_AutoComplete_Ventas().Rows;
            ComboArticulo.SelectedValuePath = "Id";
            ComboArticulo.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

          

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Articulo"].ToString();
                var Nombre = unidad["Complete"].ToString();
                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboArticulo.ItemsSource = MiLista;
        }
        public static void ComboArticulos_AutoComplete_Inventarios(ref FilteredComboBox ComboArticulo, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboArticulo.Items.Clear();            

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Articulos_AutoComplete_Inventarios().Rows;
            ComboArticulo.SelectedValuePath = "Id";
            ComboArticulo.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Artículo"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Articulo"].ToString();
                var Nombre = unidad["Complete"].ToString();
                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboArticulo.ItemsSource = MiLista;
        }

        public static void ComboArticulos_AutoComplete_Compras(ref FilteredComboBox ComboArticulo, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboArticulo.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Articulos_AutoComplete_Compras().Rows;
            ComboArticulo.SelectedValuePath = "Id";
            ComboArticulo.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Artículo"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Articulo"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboArticulo.ItemsSource = MiLista;

        }

        public static void ComboInmuebles_AutoComplete(ref FilteredComboBox ComboInmueble, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboInmueble.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Ventas.Arrendamiento.dbo_Cat_Inmueble(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Inmuebles_AutoComplete().Rows;
            ComboInmueble.SelectedValuePath = "Id";
            ComboInmueble.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Inmueble"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Inmueble"].ToString();
                var Nombre = unidad["Nombre"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboInmueble.ItemsSource = MiLista;

        }

        public static void ComboArticulos_AutoComplete_Honorarios(ref FilteredComboBox ComboArticulo, UsuarioActivo _sesion, string coincidencia, bool AceptaNulo = false)
        {
            ComboArticulo.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Articulos_AutoComplete_Honorarios().Rows;
            ComboArticulo.SelectedValuePath = "Id";
            ComboArticulo.DisplayMemberPath = "Value";

            List<CAutocomplete> MiLista = new List<CAutocomplete>();

            if (AceptaNulo)
            {
                MiLista.Add(new CAutocomplete("-1", " Sin Artículo"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Articulo"].ToString();
                var Nombre = unidad["Complete"].ToString();

                MiLista.Add(new CAutocomplete(Id, Nombre));
            }

            ComboArticulo.ItemsSource = MiLista;

        }

        public static void ComboColaborador(ref ComboBox ComboColaborador, UsuarioActivo _sesion, bool AceptaNulo = false, bool IsForReport = false)
        {
            ComboColaborador.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.CapitalHumano.Catalogos.dbo_Cat_Colaborador(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Colaboradores().Rows;
            ComboColaborador.SelectedValuePath = "Id";
            ComboColaborador.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
                ComboColaborador.Items.Add(new CItem("-1", " Sin Colaborador"));

            if (IsForReport)
                ComboColaborador.Items.Add(new CItem("-1", " Todos"));
            

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Colaborador"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboColaborador.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboColaborador.Items.Count > 0 && ComboColaborador.SelectedValue == null)
                ComboColaborador.SelectedIndex = 0;
        }

        public static void ComboColaborador_Compras(ref ComboBox ComboColaborador, UsuarioActivo _sesion, bool AceptaNulo = false, bool IsForReport = false)
        {
            ComboColaborador.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.CapitalHumano.Catalogos.dbo_Cat_Colaborador(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Colaboradores_Compras().Rows;
            ComboColaborador.SelectedValuePath = "Id";
            ComboColaborador.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
                ComboColaborador.Items.Add(new CItem("-1", " Sin Colaborador"));

            if (IsForReport)
                ComboColaborador.Items.Add(new CItem("-1", " Todos"));


            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Colaborador"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboColaborador.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboColaborador.Items.Count > 0 && ComboColaborador.SelectedValue == null)
                ComboColaborador.SelectedIndex = 0;
        }

        public static void ComboColaborador_Ventas(ref ComboBox ComboColaborador, UsuarioActivo _sesion, bool AceptaNulo = false, bool IsForReport = false)
        {
            ComboColaborador.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.CapitalHumano.Catalogos.dbo_Cat_Colaborador(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Colaboradores_Ventas().Rows;
            ComboColaborador.SelectedValuePath = "Id";
            ComboColaborador.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
                ComboColaborador.Items.Add(new CItem("-1", " Sin Colaborador"));

            if (IsForReport)
                ComboColaborador.Items.Add(new CItem("-1", " Todos"));


            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Colaborador"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboColaborador.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboColaborador.Items.Count > 0 && ComboColaborador.SelectedValue == null)
                ComboColaborador.SelectedIndex = 0;
        }

        public static void ComboCampanas(ref ComboBox ComboCampanas, UsuarioActivo _sesion, bool AceptaNulo = false, bool IsForReport = false)
        {
            ComboCampanas.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.CRM.Catalogos.dbo_Cat_Campana(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Campanas().Rows;
            ComboCampanas.SelectedValuePath = "Id";
            ComboCampanas.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
                ComboCampanas.Items.Add(new CItem("-1", " Sin Campaña"));

            if (IsForReport)
                ComboCampanas.Items.Add(new CItem("-1", " Todas"));
            

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Campana"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboCampanas.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboCampanas.Items.Count > 0 && ComboCampanas.SelectedValue == null)
                ComboCampanas.SelectedIndex = 0;
        }

        public static void ComboComoNosConociste(ref ComboBox ComboComoNosConociste)
        {
            ComboComoNosConociste.Items.Clear();

            var registros = SrvDB.ExecuteQuery_Get("SELECT * FROM dbo_Cat_ComoNosConociste").Rows;
            ComboComoNosConociste.SelectedValuePath = "Id";
            ComboComoNosConociste.DisplayMemberPath = "Nombre";

            foreach (DataRow r in registros)
            {
                var Id = r["Id_ComoNosConociste"].ToString();
                var Nombre = r["Descripcion"].ToString();
                ComboComoNosConociste.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboComoNosConociste.Items.Count > 0 && ComboComoNosConociste.SelectedValue == null)
                ComboComoNosConociste.SelectedIndex = 0;
        }

        public static void ComboSucursales(ref ComboBox ComboSucursales, UsuarioActivo _sesion, bool AceptaNulo = false)
        {
            ComboSucursales.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Configuracion.dbo_Cat_Sucursal(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Sucursales().Rows;
            ComboSucursales.SelectedValuePath = "Id";
            ComboSucursales.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
            {
                ComboSucursales.Items.Add(new CItem("-1", " Sin Sucursal"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Sucursal"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboSucursales.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboSucursales.Items.Count > 0 && ComboSucursales.SelectedValue == null)
                ComboSucursales.SelectedIndex = 0;
        }
        
        public static void ComboFormaPago(ref ComboBox ComboFormaPago, UsuarioActivo _sesion, bool AceptaNulo = false, bool IsForReport = false)
        {
            ComboFormaPago.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Forma_Pago(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Forma_Pagoes().Rows;
            ComboFormaPago.SelectedValuePath = "Id";
            ComboFormaPago.DisplayMemberPath = "Nombre";

            if(IsForReport)
                ComboFormaPago.Items.Add(new CItem("-1", "Todas"));

            if (AceptaNulo)
            {
                ComboFormaPago.Items.Add(new CItem("-1", " Sin Forma de Pago"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Forma_Pago"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboFormaPago.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboFormaPago.Items.Count > 0 && ComboFormaPago.SelectedValue == null)
                ComboFormaPago.SelectedIndex = 0;
        }

        public static void ComboTC(ref ComboBox ComboTC, UsuarioActivo _sesion, bool AceptaNulo = false)
        {
            ComboTC.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_BancoTC(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_BancoTCs().Rows;
            ComboTC.SelectedValuePath = "Id";
            ComboTC.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
            {
                ComboTC.Items.Add(new CItem("-1", " Sin Tarjeta"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_BancoTC"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboTC.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboTC.Items.Count > 0 && ComboTC.SelectedValue == null)
                ComboTC.SelectedIndex = 0;
        }

        public static void ComboMetodoPago(ref ComboBox ComboMetodoPago, UsuarioActivo _sesion, bool AceptaNulo = false)
        {
            ComboMetodoPago.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Metodo_Pago(_sesion.RFC, _sesion.UserName);
            var unidades = db.Get_Metodo_Pagoes().Rows;
            ComboMetodoPago.SelectedValuePath = "Id";
            ComboMetodoPago.DisplayMemberPath = "Nombre";

            if (AceptaNulo)
            {
                ComboMetodoPago.Items.Add(new CItem("-1", " Sin Método de Pago"));
            }

            foreach (DataRow unidad in unidades)
            {
                var Id = unidad["Id_Metodo_Pago"].ToString();
                var Nombre = unidad["Nombre"].ToString();
                ComboMetodoPago.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboMetodoPago.Items.Count > 0 && ComboMetodoPago.SelectedValue == null)
                ComboMetodoPago.SelectedIndex = 0;
        }

        public static void ComboUnidadMedida(ComboBox ComboUnidad, UsuarioActivo _sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
                {
                    var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_UM(_sesion.RFC, _sesion.UserName);
                    var unidades = db.Get_UMes().Rows;

                    if (IsForReport)
                        lista.Add(new CItem("-1", "Todas"));

                    foreach (DataRow unidad in unidades)
                    {
                        var Id = unidad["Id_UM"].ToString();
                        var Nombre = unidad["Nombre"].ToString();
                        lista.Add(new CItem(Id, Nombre));
                    }

                    ComboUnidad.Dispatcher.InvokeAsync(delegate()
                    {
                        ComboUnidad.SelectedValuePath = "Id";
                        ComboUnidad.DisplayMemberPath = "Nombre";
                        ComboUnidad.ItemsSource = lista;
                        if (ComboUnidad.Items.Count > 0 && ComboUnidad.SelectedValue == null)
                            ComboUnidad.SelectedIndex = 0;
                    }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                }).Start();
        }

        public static void ComboTipoTarjeta(ComboBox ComboTipoTarjeta, UsuarioActivo _sesion)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.Configuracion.Empresa.PagoLicencias.dbo_Cat_TipoTarjeta();
                var unidades = db.Get_Tipos_Tarjetas().Rows;

                foreach (DataRow unidad in unidades)
                {
                    var Id = unidad["Id_TipoTarjeta"].ToString();
                    var Nombre = unidad["Nombre"].ToString();
                    lista.Add(new CItem(Id, Nombre));
                }

                ComboTipoTarjeta.Dispatcher.InvokeAsync(delegate()
                {
                    ComboTipoTarjeta.SelectedValuePath = "Id";
                    ComboTipoTarjeta.DisplayMemberPath = "Nombre";
                    ComboTipoTarjeta.ItemsSource = lista;
                    if (ComboTipoTarjeta.Items.Count > 0 && ComboTipoTarjeta.SelectedValue == null)
                        ComboTipoTarjeta.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start();
        }

        public static void ComboGrupoProductos(ComboBox ComboGrupo, UsuarioActivo _sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
                {
                    var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Grupo_Productos(_sesion.RFC, _sesion.UserName);
                    var grupos = db.Get_Grupo_Productoses().Rows;

                    if (IsForReport)
                        lista.Add(new CItem("-1", "Todos"));

                    foreach (DataRow grupo in grupos)
                    {
                        var Id = grupo["Id_GrupoProductos"].ToString();
                        var Nombre = grupo["Nombre"].ToString();
                        lista.Add(new CItem(Id, Nombre));
                    }

                    ComboGrupo.Dispatcher.InvokeAsync(delegate()
                    {
                        ComboGrupo.SelectedValuePath = "Id";
                        ComboGrupo.DisplayMemberPath = "Nombre";
                        ComboGrupo.ItemsSource = lista;
                        if (ComboGrupo.Items.Count > 0 && ComboGrupo.SelectedValue == null)
                            ComboGrupo.SelectedIndex = 0;
                    }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                }).Start();
        }

        public static void ComboSubGrupoProductos(ref ComboBox ComboSubGrupo, UsuarioActivo _sesion, Int32 Grupo, bool IsForReport = false)
        {
            ComboSubGrupo.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_SubGrupo_Productos(_sesion.RFC, _sesion.UserName);
            var grupos = db.Get_Subgrupo_Productos_Por_Grupo(Grupo).Rows;
            ComboSubGrupo.SelectedValuePath = "Id";
            ComboSubGrupo.DisplayMemberPath = "Nombre";

            if(IsForReport)
                ComboSubGrupo.Items.Add(new CItem("-1", "Todos"));

            foreach (DataRow grupo in grupos)
            {
                var Id = grupo["Id_SubgrupoProductos"].ToString();
                var Nombre = grupo["Nombre"].ToString();
                ComboSubGrupo.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboSubGrupo.Items.Count > 0 && ComboSubGrupo.SelectedValue == null)
                ComboSubGrupo.SelectedIndex = 0;
        }

        public static void ComboLinea(ComboBox ComboLinea, UsuarioActivo _sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
                {

                    var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Linea(_sesion.RFC, _sesion.UserName);
                    var grupos = db.Get_Lineaes().Rows;

                    if(IsForReport)
                        lista.Add(new CItem("-1", "Todas"));

                    foreach (DataRow grupo in grupos)
                    {
                        var Id = grupo["Id_Linea"].ToString();
                        var Nombre = grupo["Nombre"].ToString();
                        lista.Add(new CItem(Id, Nombre));
                    }

                    ComboLinea.Dispatcher.InvokeAsync(delegate()
                    {
                        ComboLinea.SelectedValuePath = "Id";
                        ComboLinea.DisplayMemberPath = "Nombre";
                        ComboLinea.ItemsSource = lista;
                        if (ComboLinea.Items.Count > 0 && ComboLinea.SelectedValue == null)
                            ComboLinea.SelectedIndex = 0;
                    }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                }).Start();
        }

        public static void ComboColor(ref ComboBox ComboColor, UsuarioActivo _sesion, Int32 IdLinea, bool IsForReport = false)
        {
            ComboColor.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Color(_sesion.RFC, _sesion.UserName);
            var colores = db.Get_Colores_Por_Linea(IdLinea).Rows;
            ComboColor.SelectedValuePath = "Id";
            ComboColor.DisplayMemberPath = "Nombre";

            if(IsForReport)
                ComboColor.Items.Add(new CItem("-1", "Todos"));

            foreach (DataRow color in colores)
            {
                var Idc = color["Id_Color"].ToString();
                var Clave = color["Clave"].ToString();
                var Nombre = color["Nombre"].ToString();
                ComboColor.Items.Add(new CItem(Idc, Clave + " - " + Nombre));
            }

            if (ComboColor.Items.Count > 0 && ComboColor.SelectedValue == null)
                ComboColor.SelectedIndex = 0;
         }

        public static void ComboTalla(ref ComboBox ComboTalla, UsuarioActivo _sesion, Int32 IdLinea, bool IsForReport = false)
        {
            ComboTalla.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Talla(_sesion.RFC, _sesion.UserName);
            var colores = db.Get_Talla_Por_Linea(IdLinea).Rows;
            ComboTalla.SelectedValuePath = "Id";
            ComboTalla.DisplayMemberPath = "Nombre";

            if(IsForReport)
                ComboTalla.Items.Add(new CItem("-1", "Todas"));

            foreach (DataRow color in colores)
            {
                var Idc = color["Id_Talla"].ToString();
                var Clave = color["Clave"].ToString();
                var Nombre = color["Nombre"].ToString();
                ComboTalla.Items.Add(new CItem(Idc, Clave + " - " + Nombre));
            }

            if (ComboTalla.Items.Count > 0 && ComboTalla.SelectedValue == null)
                ComboTalla.SelectedIndex = 0;
        }

        public static void ComboGrupoClientes(ref ComboBox ComboGrupoClientes, UsuarioActivo _sesion, bool IsForReport = false)
        {
            ComboGrupoClientes.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Ventas.Catalogos.dbo_Cat_Grupo_Clientes(_sesion.RFC, _sesion.UserName);
            var grupos = db.Get_Grupo_Clientes().Rows;
            ComboGrupoClientes.SelectedValuePath = "Id";
            ComboGrupoClientes.DisplayMemberPath = "Nombre";

            if(IsForReport)
                ComboGrupoClientes.Items.Add(new CItem("-1", "Todos"));

            foreach (DataRow grupo in grupos)
            {
                var Id = grupo["Id_GrupoClientes"].ToString();
                var Nombre = grupo["Nombre"].ToString();
                ComboGrupoClientes.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboGrupoClientes.Items.Count > 0 && ComboGrupoClientes.SelectedValue == null)
                ComboGrupoClientes.SelectedIndex = 0;
        }
        public static void ComboListaPrecios(ref ComboBox ComboListaPrecios, UsuarioActivo _sesion, bool IsForReport = false)
        {
            ComboListaPrecios.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Listas_Precios(_sesion.RFC, _sesion.UserName);
            var ListaPrecios = db.Get_Lista_Precios().Rows;
            ComboListaPrecios.SelectedValuePath = "Id";
            ComboListaPrecios.DisplayMemberPath = "Nombre";

            if (IsForReport)
                ComboListaPrecios.Items.Add(new CItem("-1", "Todos"));

            foreach (DataRow lista in ListaPrecios)
            {
                var Id = lista["Id_Lista_Precios"].ToString();
                var Nombre = lista["Nombre"].ToString();
                ComboListaPrecios.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboListaPrecios.Items.Count > 0 && ComboListaPrecios.SelectedValue == null)
                ComboListaPrecios.SelectedIndex = 0;
        }
        public static void ComboRegimenFiscal(ref ComboBox ComboRegimenFiscal)
        {
            ComboRegimenFiscal.Items.Clear();

            var db = SrvDB.ExecuteQuery_Get("SELECT * FROM dbo_Cat_Regimen_Fiscal");
            var grupos = db.Rows;
            ComboRegimenFiscal.SelectedValuePath = "Id";
            ComboRegimenFiscal.DisplayMemberPath = "Nombre";
            foreach (DataRow grupo in grupos)
            {
                var Id = grupo["Id_Regimen_Fiscal"].ToString();
                var Nombre = grupo["Nombre"].ToString();
                ComboRegimenFiscal.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboRegimenFiscal.Items.Count > 0 && ComboRegimenFiscal.SelectedValue == null)
                ComboRegimenFiscal.SelectedIndex = 0;
        }

        public static void ComboTerminosPago(ref ComboBox ComboTerminos, UsuarioActivo _sesion)
        {
            ComboTerminos.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Terminos_Pago(_sesion.RFC, _sesion.UserName);
            var terminos = db.Get_Terminos_Pagoes().Rows;
            ComboTerminos.SelectedValuePath = "Id";
            ComboTerminos.DisplayMemberPath = "Nombre";
            foreach (DataRow termino in terminos)
            {
                var Id = termino["Id_Terminos_Pago"].ToString();
                var Nombre = termino["Nombre"].ToString();
                ComboTerminos.Items.Add(new CItem(Id, Nombre));
            }

            if (ComboTerminos.Items.Count > 0 && ComboTerminos.SelectedValue == null)
                ComboTerminos.SelectedIndex = 0;
        }

        public static void ComboMonedas(ComboBox ComboMoneda, UsuarioActivo _sesion)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
                {

                    var monedas = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Moneda(_sesion.RFC, _sesion.UserName);
                    var listado = monedas.Get_Monedas().Rows;
                   
                    foreach (DataRow moneda in listado)
                    {
                        var Id = moneda["Id_Moneda"].ToString();
                        var Nombre = moneda["Nombre"].ToString();
                        lista.Add(new CItem(Id, Nombre));
                    }

                    ComboMoneda.Dispatcher.InvokeAsync(delegate()
                    {
                        ComboMoneda.SelectedValuePath = "Id";
                        ComboMoneda.DisplayMemberPath = "Nombre";
                        ComboMoneda.ItemsSource = lista;
                        if (ComboMoneda.Items.Count > 0 && ComboMoneda.SelectedValue == null)
                            ComboMoneda.SelectedIndex = 0;
                    }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                }).Start();
        }

        public static void ComboSeries(ref ComboBox ComboSerie, UsuarioActivo _sesion)
        {
            ComboSerie.Items.Clear();

            var db = new SIIE_ERP.BaseDatos.Configuracion.dbo_Cat_Empresa_Serie(_sesion.RFC, _sesion.UserName);
            var series = db.Get_Empresa_Seriees().Rows;

            ComboSerie.SelectedValuePath = "Id";
            ComboSerie.DisplayMemberPath = "Nombre";

            foreach (DataRow serie in series)
            {
                ComboSerie.Items.Add(new CSerie(serie["Id_Serie"].ToString(), serie["Nombre"].ToString()));
            }

            if (ComboSerie.Items.Count > 0 && ComboSerie.SelectedValue == null)
                ComboSerie.SelectedIndex = 0;
        }

        public static void ComboTasasImpuestos(ComboBox ComboTipoImpuesto, UsuarioActivo _sesion)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
                {

                    var impuestos = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_TasaImpuesto(_sesion.RFC, _sesion.UserName);
                    var listado = impuestos.Get_TasaImpuestoes().Rows;
                    
                    foreach (DataRow impuesto in listado)
                    {
                        var Id = impuesto["Id_TasaImpuesto"].ToString();
                        var Nombre = impuesto["Nombre"].ToString();
                        lista.Add(new CItem(Id, Nombre));
                    }

                    ComboTipoImpuesto.Dispatcher.InvokeAsync(delegate()
                    {
                        ComboTipoImpuesto.SelectedValuePath = "Id";
                        ComboTipoImpuesto.DisplayMemberPath = "Nombre";
                        ComboTipoImpuesto.ItemsSource = lista;
                        if (ComboTipoImpuesto.Items.Count > 0 && ComboTipoImpuesto.SelectedValue == null)
                            ComboTipoImpuesto.SelectedIndex = 0;
                    }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                }).Start();
        }

        public static void ComboPaisEstado(ref ComboBox ComboPais, ref ComboBox ComboEstado)
        {
            ComboPaisEstado(ref ComboPais, ref ComboEstado, 1, 1);
        }

        public static void ComboPaisEstado(ref ComboBox ComboPais, ref ComboBox ComboEstado, int Pais, int Estado)
        {            
            // Conecta a la base de datos
            DataTable db_paises = dbo_Cat_SIIE.Get_Paises();
            DataTable db_estados = dbo_Cat_SIIE.Get_Estados(Pais);

            // Cargar los paises    
            List<CPaisEstado> paises = new List<CPaisEstado>();
            List<CPaisEstado> estados = new List<CPaisEstado>();

            for (int i = 0; i < db_paises.Rows.Count; i++)
                paises.Add(new CPaisEstado(Int32.Parse(db_paises.Rows[i]["Id_SIIE_Pais"].ToString()), db_paises.Rows[i]["Nombre"].ToString()));

            for (int i = 0; i < db_estados.Rows.Count; i++)
                estados.Add(new CPaisEstado(Int32.Parse(db_estados.Rows[i]["Id_SIIE_Estado"].ToString()), db_estados.Rows[i]["Nombre"].ToString()));

            ComboPais.SelectedValuePath = "Id";
            ComboPais.DisplayMemberPath = "Nombre";
            foreach (CPaisEstado pais in paises)
            {
                ComboPais.Items.Add(pais);
            }
            // Establece el seleccionado
            //ComboPais.SelectedValue = Pais.ToString();

            ComboPais.SelectedValue = Pais;

            // Cargar los estados del pais seleccionado

            ComboEstado.SelectedValuePath = "Id";
            ComboEstado.DisplayMemberPath = "Nombre";
            foreach (CPaisEstado estado in estados)
            {
                ComboEstado.Items.Add(estado);
            }
            // Establece el seleccionado
            ComboEstado.SelectedValue = Estado;
        }

        public static void ActualizaEstado(object Pais, ref ComboBox ComboEstado)
        {
            if (Pais != null)
            {
                ActualizaEstado((int)Pais, ref ComboEstado);
            }
        }

        public static void ActualizaEstado(int Pais, ref ComboBox ComboEstado)
        {
            DataTable db_estados = dbo_Cat_SIIE.Get_Estados(Pais);
            List<CPaisEstado> estados = new List<CPaisEstado>();

            for (int i = 0; i < db_estados.Rows.Count; i++)
                estados.Add(new CPaisEstado(Int32.Parse(db_estados.Rows[i]["Id_SIIE_Estado"].ToString()), db_estados.Rows[i]["Nombre"].ToString()));
            
            ComboEstado.SelectedValuePath = "Id";
            ComboEstado.DisplayMemberPath = "Nombre";
            ComboEstado.Items.Clear();
            foreach (CPaisEstado estado in estados)
            {
                ComboEstado.Items.Add(estado);
            }
            ComboEstado.SelectedIndex = 0;
        }

        public static void ComboFunciones(ref ComboBox ComboFuncion, UsuarioActivo _sesion)
        {
            var funciones = SIIE_ERP.Codigo.CapitalHumano.Catalogos.CapitalHumanoCode.ObtenerTodasFunciones(_sesion);
            ComboFuncion.DisplayMemberPath = "Funcion";
            ComboFuncion.SelectedValuePath = "Id";
            foreach (SIIE_ERP.Codigo.CapitalHumano.Catalogos.CCapitalHumanoFunciones funcion in funciones)
            {
                ComboFuncion.Items.Add(funcion);
            }

            if (ComboFuncion.Items.Count > 0 && ComboFuncion.SelectedValue == null)
                ComboFuncion.SelectedIndex = 0;
        }

        public static void ComboTipoActividad(ComboBox Combo, UsuarioActivo sesion, bool IsForReport = false)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.CRM.Catalogos.dbo_Cat_Tipo_Actividad(sesion.RFC, sesion.UserName);
                var tipos = db.Get_Tipo_Actividades().Rows;

                if(IsForReport)
                    lista.Add(new CItem("-1", "Todas"));

                foreach (DataRow tipo in tipos)
                {
                    var Id = tipo["Id_TipoActividades"].ToString();
                    var Nombre = tipo["Nombre"].ToString();
                    lista.Add(new CItem(Id, Nombre));
                }

                Combo.Dispatcher.InvokeAsync(delegate()
                {
                    Combo.SelectedValuePath = "Id";
                    Combo.DisplayMemberPath = "Nombre";
                    Combo.ItemsSource = lista;
                    if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                        Combo.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start();  

        }

        public static void ComboCertificadosFE(ComboBox Combo, UsuarioActivo sesion)
        {
            List<CItem> lista = new List<CItem>();
            new Thread(() =>
            {
                var db = new SIIE_ERP.BaseDatos.Configuracion.Empresa.dbo_Cat_Empresa_Certificado_FE(sesion.RFC, sesion.UserName);
                var tipos = db.Get_Empresa_Certificado_FEes().Rows;

                foreach (DataRow tipo in tipos)
                {
                    var Id = tipo["Id_Certificado_FE"].ToString();
                    var Nombre = tipo["Nombre"].ToString();
                    lista.Add(new CItem(Id, Nombre));
                }

                Combo.Dispatcher.InvokeAsync(delegate()
                {
                    Combo.SelectedValuePath = "Id";
                    Combo.DisplayMemberPath = "Nombre";
                    Combo.ItemsSource = lista;
                    if (Combo.Items.Count > 0 && Combo.SelectedValue == null)
                        Combo.SelectedIndex = 0;
                }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
            }).Start(); 
        }




       
    }



    public class NavegacionUI
    {
        public static Window GetParentWindow(DependencyObject reference)
        {
            var parent = VisualTreeHelper.GetParent(reference);
            while (!(parent is Window))
            {
                parent = VisualTreeHelper.GetParent(parent);
            }
            return parent as Window;
        }

        public static void AbrirPestanaEditar(String Texto, Type Elemento, ref TabControl Contenedor, UsuarioActivo _sesion)
        {
            if (String.IsNullOrEmpty(Texto) || Elemento == null || Contenedor == null)
            {
                throw new ArgumentNullException();
            }
            // Validar que no abra dos del mismo:
            foreach (TabItem tab in Contenedor.Items)
            {
                if (tab.Header.Equals("Editar [" + Texto + "]"))
                {
                    return;
                }
            }
            TabItem NuevoTab = new TabItem { Header = "Editar [" + Texto + "]" };
            var parametros = new object[] { _sesion, Texto };
            NuevoTab.Content = Activator.CreateInstance(Elemento, parametros);
            (NuevoTab.Content as IPropiedadesNavegacion).setParametros(Texto, ref Contenedor, ref NuevoTab);
            Contenedor.Items.Add(NuevoTab);
            Contenedor.SelectedIndex = Contenedor.Items.Count - 1;
        }

        public static void AbrirPestanaNuevo(Type Elemento, ref TabControl Contenedor, UsuarioActivo _sesion)
        {
            if (Elemento == null || Contenedor == null)
            {
                throw new ArgumentNullException();
            }
            TabItem NuevoTab = new TabItem { Header = "[+]" };
            var parametros = new object[] { _sesion };
            NuevoTab.Content = Activator.CreateInstance(Elemento, parametros);
            (NuevoTab.Content as IPropiedadesNavegacion).setParametros("", ref Contenedor, ref NuevoTab);
            Contenedor.Items.Add(NuevoTab);
            Contenedor.SelectedIndex = Contenedor.Items.Count - 1;
        }

        //Método para la impresión de Documentos
        public static void AbrirPestanaNuevo(Type Elemento, ref TabControl Contenedor, UsuarioActivo _sesion, string RutaImpresion, int Id_Documento)
        {
            if (Elemento == null || Contenedor == null)
            {
                throw new ArgumentNullException();
            }
            TabItem NuevoTab = new TabItem { Header = "[+]" };
            var parametros = new object[] { _sesion, RutaImpresion, Id_Documento };
            NuevoTab.Content = Activator.CreateInstance(Elemento, parametros);
            (NuevoTab.Content as IPropiedadesNavegacion).setParametros("", ref Contenedor, ref NuevoTab);
            Contenedor.Items.Add(NuevoTab);
            Contenedor.SelectedIndex = Contenedor.Items.Count - 1;
        }

       
    }

    public interface IPropiedadesNavegacion
    {
        void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem);
    }

    public class CPaisEstado
    {
        public int Id { get; set; }
        public string Nombre { get; set; }

        public CPaisEstado(int Id, string Nombre)
        {
            this.Id = Id;
            this.Nombre = Nombre;
        }
    }

    class CItem
    {
        public string Id { get; set; }
        public string Nombre { get; set; }
        public CItem(string Id, string Nombre)
        {
            this.Id = Id;
            this.Nombre = Nombre;
        }
    }

    class CSerie
    {
        public string Id { get; set; }
        public string Nombre { get; set; }

        public CSerie(string Id, string Nombre)
        {
            this.Id = Id;
            this.Nombre = Nombre;
        }
    }
}
